CircleCIのAPIを利用して、過去24時間の大まかなクレジット利用量を把握する

CircleCIのAPIを利用して、過去24時間の大まかなクレジット利用量を把握する

CircleCIのAPIを利用して、insights情報を取得してみました。
Clock Icon2023.09.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CircleCIを利用していると、クレジット消費量を分析して、削減を検討することもあると思います。 Insightsダッシュボードでも閲覧できますが、「わざわざ見に行く」という動機が薄かったり、うっかり忘れることもありえます。

そこで、CircleCIで利用したおおよそのクレジットを把握するためのスクリプトを作成してみました。 本記事ではスクリプト作成のみですが、Lambdaで動かしてSlackに通知するなどをすることで、気づきを得る機会になればと思います。

  • 昨日はたくさん動かしたから、まあ、増えるよね
  • あれ? 昨日はそんなに動かしてないけど、そこそこ増えてるね。なんでだろう?

おすすめの方

  • CircleCIのAPIを利用したい方
  • CircleCIで利用したおおよそのクレジットを把握したい方

重要

公式ドキュメントに下記の記載があります。

  • 取得できるデータは、リアルタイムのデータではない
    • 最新情報が反映されるまで、最大24時間かかることがある
  • リアルタイムの財務報告ツールではない
    • 正式なクレジット利用量は、Planで確認すること

本記事では、あくまでも、おおよその値と傾向を把握することが目的です。 正式なクレジット利用量の把握や金額策定などには利用しないでください。

APIトークンを取得する

Personal API Tokensにアクセスして、APIトークンを取得します。取り扱いに注意してください。

CircleCIのinsightsを取得し、利用したクレジットを把握するスクリプトを作成する

次のAPIを利用します。

org-slugは、vcs-slug/org-nameです。たとえば、下記です。

  • github/your-org-name
  • github/your-github-user-name

次のスクリプトでは、過去24時間のデータを取得しています。そして、クレジットの合計とリポジトリ毎のクレジットを表示します。

import json
import requests


API_TOKEN = "xxx"

CIECLECI_ENDPOINT = "circleci.com/api/v2"

ORG_SLUG = "vcs-slug/org-name"


def main():
    summary = get_summary()

    total_credits_used = summary["org_data"]["metrics"]["total_credits_used"]

    print(f"total_credits_used: {total_credits_used}")

    for item in sorted(
        summary["org_project_data"],
        key=lambda x: x["metrics"]["total_credits_used"],
        reverse=True,
    ):
        print("-----")
        print(f"  {item['project_name']}")
        print(f"  {item['metrics']['total_credits_used']}")


def get_summary() -> dict:
    # https://circleci.com/docs/api/v2/index.html#operation/getOrgSummaryData
    headers = {
        "Content-Type": "application/json",
        "Accept": "application/json",
        "Circle-Token": API_TOKEN,
    }
    resp = requests.get(
        f"https://{CIECLECI_ENDPOINT}/insights/{ORG_SLUG}/summary?reporting-window=last-24-hours",
        headers=headers,
    )

    return resp.json()


if __name__ == "__main__":
    main()

スクリプトを実行する

次のように表示されます。数字は適当です。

total_credits_used: 1234
-----
  repository1
  1000
-----
  repository2
  200
-----
  repository3
  30
-----
  repository4
  4
-----
  repository5
  0

さいごに

CircleCIで利用したおおよそのクレジットを把握するためのスクリプトを作成してみました。 さらに便利に利用する場合は、Lambdaで動かしてSlackに通知するなどの方法がありますね。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.